package com.leecode.xiehf.page_01;

import java.util.Arrays;

/**
 * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度
 */
public class Solution_0003 {

    public static void main(String[] args) {
        String s1 = "bbcbacba";
        Solution_0003 solution3 = new Solution_0003();
        System.out.println(solution3.lengthOfLongestSubstring(s1));
    }

    public int lengthOfLongestSubstring(String s) {
        if (s == null || s.length() == 0) {
            return 0;
        }
        int[] indexs = new int[128];
        Arrays.fill(indexs, -1);

        int start = 0;
        int res = 0;
        for (int i = 0; i < s.length(); i++) {
            // 自动转为数字 0 - 127
            int index = s.charAt(i);
            // 如果字符第一次出现，那还是以上一次的起点为准
            // 如果又出现一次说明重复了，从上一次出现的位置+1开始，
            start = Math.max(start, indexs[index] + 1);
            // 长度就变成当前位置与起点的长度
            res = Math.max(res, i - start + 1);
            indexs[index] = i;
        }
        return res;
    }
}
